ENTRY(gdt_table)
.quad 0x0000000000000000 /* NULL descriptor */
.quad 0x0000000000000000 /* not used */
- .quad 0x00ceba000000ffff /* 0x11 ring 1 3.5GB code at 0x00000000 */
- .quad 0x00ceb2000000ffff /* 0x19 ring 1 3.5GB data at 0x00000000 */
- .quad 0x00cefa000000ffff /* 0x23 ring 3 3.5GB code at 0x00000000 */
- .quad 0x00cef2000000ffff /* 0x2b ring 3 3.5GB data at 0x00000000 */
+ .quad 0x00cdba000000ffff /* 0x11 ring 1 3.5GB code at 0x00000000 */
+ .quad 0x00cdb2000000ffff /* 0x19 ring 1 3.5GB data at 0x00000000 */
+ .quad 0x00cdfa000000ffff /* 0x23 ring 3 3.5GB code at 0x00000000 */
+ .quad 0x00cdf2000000ffff /* 0x2b ring 3 3.5GB data at 0x00000000 */
.quad 0x00cf9a000000ffff /* 0x30 ring 0 4.0GB code at 0x00000000 */
.quad 0x00cf92000000ffff /* 0x38 ring 0 4.0GB data at 0x00000000 */
.quad 0x0000000000000000
unsigned long cur_address, end_address, alloc_address, vaddr;
unsigned long virt_load_address, virt_stack_address, virt_shinfo_address;
unsigned long virt_ftable_start_addr = 0, virt_ftable_end_addr;
- unsigned long ft_mapping = frame_table;
+ unsigned long ft_mapping = (unsigned long)frame_table;
unsigned int ft_size = 0;
start_info_t *virt_startinfo_address;
unsigned long long time;
l1_pgentry_t *l1tab = NULL;
struct pfn_info *page = NULL;
net_ring_t *net_ring;
- blk_ring_t *blk_ring;
if ( strncmp(__va(mod[0].mod_start), "XenoGues", 8) )
{
net_ring = create_net_vif(dom);
if (!net_ring) panic("no network ring!\n");
}
- virt_startinfo_address->net_rings = p->net_ring_base;
+
+/* XXX SMH: horrible hack to convert hypervisor VAs in SHIP to guest VAs */
+#define SHIP2GUEST(_x) (virt_shinfo_address | (((unsigned long)(_x)) & 0xFFF))
+
+ virt_startinfo_address->net_rings =
+ (net_ring_t *)SHIP2GUEST(p->net_ring_base);
virt_startinfo_address->num_net_rings = p->num_net_vifs;
/* Add block io interface */
- virt_startinfo_address->blk_ring = p->blk_ring_base;
+ virt_startinfo_address->blk_ring =
+ (blk_ring_t *)SHIP2GUEST(p->blk_ring_base);
+
/* We tell OS about any modules we were given. */
if ( nr_mods > 1 )